package com.solution.wx.share.service;

import java.util.List;
import java.util.Map;

import com.solution.common.page.PageBean;
import com.solution.common.page.PageParam;
import com.solution.wx.share.entity.ShareInfoEntity;

/**
 * 用户分享service接口
 * @author xkl
 * @date 2018年5月3日 下午8:12:35
 */
public interface ShareInfoService {
	/**
	 * 获取用户分享信息分页列表
	 * @param pageParam
	 * @param param
	 * @return
	 * @author xkl
	 * @date 2018年5月4日 下午4:36:12
	 */
	public PageBean listShareInfoPage(PageParam pageParam, Map<String, Object> param);
	
	/**
	 * 检查用户是否对分享信息点赞
	 * @param shareInfoEntity
	 * @param customerId
	 * @return
	 * @author xkl
	 * @date 2018年5月5日 下午4:22:43
	 */
	public Long isUserLike(Long shareId, Long customerId);
	
	/**
	 * 检查用户是否对分享信息收藏
	 * @param shareId
	 * @param customerId
	 * @return
	 * @author xkl
	 * @date 2018年5月8日 下午2:36:48
	 */
	public Long isUserFavorite(Long shareId, Long customerId);
	
	/**
	 * 分享内容点赞
	 * 记录用户点赞信息并对内容点赞数+1
	 * @param shareId
	 * @param customerId
	 * @return
	 * @author xkl
	 * @date 2018年5月5日 下午4:31:15
	 */
	public Long doShareInfoLike(Long shareId, Long customerId);
	
	/**
	 * 分享内容评论
	 * 评论数+1
	 * @param shareId
	 * @return
	 * @author xkl
	 * @date 2018年5月8日 下午2:46:35
	 */
	public Long doShareInfoComment(Long shareId);
	
	/**
	 * 分享内容收藏
	 * 记录用户收藏信息并对内容收藏数+1
	 * @param shareId
	 * @param customerId
	 * @return
	 * @author xkl
	 * @date 2018年5月8日 下午2:47:15
	 */
	public Long doShareInfoFavorite(Long shareId, Long customerId);
	
	/**
	 * 取消收藏
	 * @param shareId
	 * @param customerId
	 * @return
	 * @author xkl
	 * @date 2018年6月12日 上午10:03:46
	 */
	public int removeShareInfoFavorite(Long shareId, Long customerId);
	
	/**
	 * 分享内容分享
	 * 分享数+1
	 * @param shareId
	 * @param customerId
	 * @return
	 * @author xkl
	 * @date 2018年5月8日 下午2:48:21
	 */
	public Long doShareInfoShared(Long shareId);
	
	/**
	 * 分享商品的分享数+1
	 * @param productId
	 * @return
	 * @author xkl
	 * @date 2018年6月8日 下午5:32:36
	 */
	public Long doShareProductRecord(Long productId);
	
	/**
	 * 分享内容浏览次数+1
	 * @param shareId
	 * @return
	 * @author xkl
	 * @date 2018年5月17日 下午2:31:48
	 */
	public Long doShareInfoView(Long shareId);
	
	/**
	 * 分享内容引导注册次数+1
	 * @param shareId
	 * @return
	 * @author xkl
	 * @date 2018年5月17日 下午2:31:48
	 */
	public Long doShareInfoRegister(Long shareId);
	
	/**
	 * 分享商品的注册引导次数+1
	 * @param productId
	 * @return
	 * @author xkl
	 * @date 2018年6月8日 下午5:30:34
	 */
	public Long doShareProductRegister(Long productId);
	
	/**
	 * 获取用户分享信息
	 * @param shareId
	 * @return
	 * @author xkl
	 * @date 2018年5月7日 下午5:09:04
	 */
	public ShareInfoEntity getShareInfoById(Long shareId);
	
	/**
	 * 根据uuid获取分享信息
	 * @param uuid
	 * @return
	 * @author xkl
	 * @date 2018年5月11日 上午9:57:32
	 */
	public ShareInfoEntity getShareInfoByUUID(String uuid);
	
	/**
	 * 保存分享信息
	 * @param entity
	 * @return
	 * @author xkl
	 * @date 2018年5月11日 上午11:28:21
	 */
	public Long saveShareInfo(ShareInfoEntity entity);
	
	/**
	 * 批量保存分享信息
	 * @param shareInfoList
	 * @return
	 * @author xkl
	 * @date 2018年6月12日 下午6:49:42
	 */
	public int saveShareInfo(List<ShareInfoEntity> shareInfoList);
	
	/**
	 * 获取已改变的分享信息
	 * @return
	 * @author xkl
	 * @date 2018年5月17日 下午3:20:34
	 */
	public List<String> listChangeShareInfo();
	
	/**
	 * 查询我的分享列表
	 * @param pageParam
	 * @param param
	 * @return
	 * @author xkl
	 * @date 2018年5月17日 下午8:06:04
	 */
	public PageBean listMySharePage(PageParam pageParam, Map<String, Object> param);
	
	/**
	 * 获取分享途径的已完成销售订单统计
	 * @param paramMap
	 * @return
	 * @author xkl
	 * @date 2018年5月19日 下午1:31:07
	 */
	public Map<Long, Map<String, Object>> listShareOrderInfo(Map<String, Object> paramMap);
	
	/**
	 * 从redis中读取分享的用户交互数据信息
	 * @param shareId
	 * @return
	 * @author xkl
	 * @date 2018年5月22日 下午6:03:36
	 */
	public ShareInfoEntity getShareInteraction(String shareId);
	
	/**
	 * 移除redis内数据改变列表内的数据
	 * @param shareidList
	 * @return
	 * @author xkl
	 * @date 2018年5月23日 下午4:32:05
	 */
	public Long removeShareInteractionChange(List<String> shareIdList);
	
	/**
	 * 分享信息PV、UV统计
	 * @param shareId
	 * @param customer
	 * @return
	 * @author xkl
	 * @date 2018年6月2日 下午3:15:54
	 */
	public Long doShareInfoPVUV(Long shareId, String customer);
	
	/**
	 * 分享商品的PV、UV统计
	 * @param productId
	 * @param customer
	 * @return
	 * @author xkl
	 * @date 2018年6月8日 下午5:35:59
	 */
	public Long doShareProductPVUV(Long productId, String customer);
	
	/**
	 * 保存分享商品订单记录
	 * @param paramMap
	 * @return
	 * @author xkl
	 * @date 2018年6月4日 下午7:12:25
	 */
	public int saveShareOrder(Map<String, Object> paramMap);
	
	/**
	 * 分享商品订单统计
	 * @return
	 * @author xkl
	 * @date 2018年6月4日 下午7:12:50
	 */
	public int updateShareOrderStatistics();
	
	/**
	 * 保存访问用户推荐人
	 * @param sessionId
	 * @param invitationCode
	 * @author xkl
	 * @date 2018年6月26日 下午4:00:19
	 */
	public boolean doRecordInvitation(String sessionId, String invitationCode);
	
	/**
	 * 获取用户邀请人的邀请码
	 * @param sessionId
	 * @return
	 * @author xkl
	 * @date 2018年6月26日 下午5:12:32
	 */
	public String getParentInvitationCode(String sessionId);
	
	/**
	 * 保存模块分享记录
	 * @param shareModule
	 * @param shareInfList
	 * @author xkl
	 * @date 2018年7月4日 上午11:41:21
	 */
	public int saveShareModuleList(ShareInfoEntity shareModule, List<ShareInfoEntity> shareInfList);
}
